Introduction

Main focus of this side project is to find phase-transition which happen when we are changing boundary/Acceptability of different opinion and Narrowness of identity group. Result should be a simple graph showing how ESBG polarization changes with change of Acceptability of different opinion and Narrowness of identity group.

Note: Experiment is still running, we are at 26 complete sets of all values combinations out of 120. Also note, that it seems that we are not done yet, we probably will need more sets than 120 and more values of Narrowness of identity group.

Processing raw data files

Loading data

Data are at https://github.com/frantisek901/Spirals/tree/master/Experiment. Experiment is still running and I, FranČesko, from time to time actualize the *.csv files at GitHub, then I run script experiment.R which loads the data. Now, 2022-03-25, we are at 20 %, roughly. Who is not interested in working with megabytes of *.csv files, might use compiled phase2w.RData.

Now we load and aggregate these data and factorize and rename selected variables:

## Loading stored data
load("phase2w.RData")


## Firstly, we have to find, what is the highest complete RS, i.e. set of all parameters' combinations simulated:
RS_complete = (phase2w %>% group_by(RS) %>% summarise(n = n()) %>% filter(n == max(n)))$RS 


## Preparing individual data 'dfi'
dfi = phase2w %>% 
  ## Filtering variables:
  filter(RS %in% RS_complete, identity) %>%  #  | (RS >= 61 & RS <= 96),  
  ## Denormalizing ESBG:
  mutate(ESBG = ESBG * sqrt(opinions))


## Summarising 'dfi' into 'dfs':
dfs = dfi %>% 
  group_by(opinions, boundary, identity, id_threshold) %>% 
  summarise(ESBG = mean(ESBG)) %>% ungroup() %>% 

  ## Renaming variables according 2022-03-18 meeting:
  prejmenuj(1:4, c("Opinion dimensions:", "Acceptability of different opinion:", "Identity:", 
                    "Narrowness of identity group:"))

NOTE:

I de-normalized ESBG, i.e. I multiply. I just noticed that systematically ESBG is lower and also much denser in higher dimensions. I have also substantive/philosophical reasons for this de-normalization, now I will try it and describe the reasons for de-normalization later in detail. But just briefly:

I think that agents do not know in how many dimensions they are and what is the maximum posible distance, they feel polarisation reegarding the other group not regarding the group and the possible maxima of distance, let’s do following thought experiment:

Our agents living in 1D, they discuss just one topic, they are divided in two camps of equal size and these two camps are at the poles -1 and +1 of their opinion space, the polarization is maximal, ESBG is 1. Then we take this strange world on a string and put it on the table, now they are in 2D world, their distance is same since the don’t change it, they should stil feel polarization of margin ESBG=1 since nothing changed. Then we recognize that table is in the roomm – 3D, then we rocignize time – 4D… But polarization should be still same, since these agent don’t change their positions.

So, this was the argument :-) and now let’s look, how results change after de-normalization of ESBG…

GREAT! Results look GREAT! Now the polarization is more ballanced over dimensions, but still, even after de-normalization, holds true that the more dimensions the less polarization.

Graphs

Now, let’s show our results graphically!

Color maps

Smaller maps, one by one

dfs %>% 
  ggplot() +
  aes(x = `Acceptability of different opinion:`, col = ESBG, fill = ESBG,
      y = `Narrowness of identity group:`) +
  facet_wrap(vars(`Opinion dimensions:`), ncol=3) +
  geom_point(alpha = 1, size = 1.75, shape = 22) +
  scale_fill_gradient2(low = "green", mid = "red", high = "black", midpoint = 0.3) +
  scale_color_gradient2(low = "green", mid = "red", high = "black", midpoint = 0.3) +
  scale_y_continuous(breaks = seq(0.05, 0.85, 0.05)) +
  scale_x_continuous(breaks = seq(0.05, 0.50, 0.05)) +
  labs(title = "Change of polarization in simulations by 'Opinion dimensions' (1, 2, 4), 'Narrowness of identity group' (0.05--0.85) and\n'Average acceptability of different opinions' (0.05--0.5)",
       x = "Average acceptability of different opinions") +
  guides(alpha = "none") +
  theme_minimal() +
  theme(legend.position = "top")  

  1. I love these pictures! Whole my life I’d like to produce something meaningful looking like this – and here I am!
  2. the more dimensions the less polarization,
  3. the least polarized region is quarter of circle in the right bottom corner, then the left-hand side stripe, and the most polarized is the resting region (the most polarized part of this region seems to move with change of dimensions, but may be it is the artifact of low number of simulations – sometimes it is upper-right corner, sometimes upper border, sometimes right border)

Detailed maps: one after one

Just for a try, same map, but more detailed and with panels organized in column insted of in a row:

dfs %>% 
  ggplot() +
  aes(x = `Acceptability of different opinion:`, fill = ESBG, col = ESBG, label = round(100*ESBG, 0),
      y = `Narrowness of identity group:`) +
  facet_wrap(vars(`Opinion dimensions:`), ncol=1) +
  geom_point(alpha = 1, size = 6.6, shape = 22) +
  geom_text(color = "white", size = 2) +
  scale_fill_gradient2(low = "green", mid = "red", high = "black", midpoint = 0.3) +
  scale_color_gradient2(low = "green", mid = "red", high = "black", midpoint = 0.3) +
  scale_y_continuous(breaks = seq(0.05, 0.85, 0.05), labels = seq(0.05, 0.85, 0.05)) +
  scale_x_continuous(breaks = seq(0.05, 0.50, 0.05), labels = seq(0.05, 0.50, 0.05)) +
  labs(title = "Change of polarization in simulations by 'Opinion dimensions' (1, 2, 4), 'Narrowness of identity group' (0.05--0.85) and\n'Average acceptability of different opinions' (0.05--0.5)",
       x = "Average acceptability of different opinions", 
       caption = "Note: Numbers indicate polarization, they are equal to `round(100 * ESBG, 0)`.") +
  guides(alpha = "none") +
  theme_minimal() +
  theme(legend.position = "top")  

Pulped clouds

For the first graph on pulped clouds we aggregate Acceptability of different opinion into 13 categories (we just round 121 original values to 2 digits). Two different levels of polarization are seeable here, but it doesn’t look like clouds…

Acceptability: reduced boxplot

## For presenting variability we try now boxplots on individual data (non-aggregated):
dfi %>%
  filter(round(100 * id_threshold, 0) %in% seq(5, 85, 10)) %>% 
  # sample_n(2000) %>%
  ## Selecting variables:
  select(opinions, boundary, id_threshold, ESBG) %>% 
  mutate(id_threshold = factor(id_threshold),
         opinions = factor(opinions)) %>% 
  
  ## Renaming variables according 2022-03-18 meeting:
  prejmenuj(1:3, c("Opinion dimensions:", "Acceptability of different opinion:",  
                    "Narrowness of identity group:")) %>% 

  ## Graph itself:
  ggplot() +
  aes(x = `Acceptability of different opinion:`, y = ESBG, 
      fill = `Narrowness of identity group:`,
      col = `Narrowness of identity group:`, 
      group = `Acceptability of different opinion:`) +
  facet_wrap(vars(`Narrowness of identity group:`, `Opinion dimensions:`), ncol=3) +
  geom_boxplot(alpha = 0.2) +
  geom_jitter(alpha = 0.2) +
  scale_x_continuous(breaks = seq(0.05, 0.50, 0.05)) +
  labs(title = "Change of polarization in simulations by 'Opinion dimensions' (1, 2, 4),\n'Narrowness of identity group' (0.05--0.85) and 'Average acceptability of different opinions' (0.05--0.5)",
       x = "Average acceptability of different opinions", y = "Polarization") +
  guides(fill = "none", color = "none") +
  theme_minimal() +
  theme(legend.position = "top")  

Acceptability: full boxplot

Now same graph, but with every value:

## For presenting variability we try now boxplots on individual data (non-aggregated):
dfi %>%
  # sample_n(20000) %>%
  ## Selecting variables:
  select(opinions, boundary, id_threshold, ESBG) %>% 
  
  ## Changing some variables to factors:
  mutate(id_threshold = factor(id_threshold),
         opinions = factor(opinions)) %>% 
 
  ## Renaming variables according 2022-03-18 meeting:
  prejmenuj(1:3, c("Opinion dimensions:", "Acceptability of different opinion:",  
                    "Narrowness of identity group:")) %>% 

  ## Graph itself:
  ggplot() +
  aes(x = `Acceptability of different opinion:`, y = ESBG, 
      fill = `Narrowness of identity group:`,
      col = `Narrowness of identity group:`, 
      group = `Acceptability of different opinion:`) +
  facet_wrap(vars(`Narrowness of identity group:`, `Opinion dimensions:`), ncol=3) +
  geom_boxplot(alpha = 0.2) +
  geom_jitter(alpha = 0.2) +
  scale_x_continuous(breaks = seq(0.05, 0.50, 0.05)) +
  labs(title = "Change of polarization in simulations by 'Opinion dimensions' (1, 2, 4),\n'Narrowness of identity group' (0.05--0.85) and 'Average acceptability of different opinions' (0.05--0.5)",
       x = "Average acceptability of different opinions", y = "Polarization") +
  guides(fill = "none", color = "none") +
  theme_minimal() +
  theme(legend.position = "top")  

Acceptability: reduced scatter plot

Now, same data but slightly different graph

## For presenting variability we try now scatter plot only on individual data (non-aggregated):
dfi %>%
  filter(round(100 * id_threshold, 0) %in% seq(5, 85, 10)) %>% 
  # sample_n(2000) %>%
  ## Selecting variables:
  select(opinions, boundary, id_threshold, ESBG) %>% 

  ## Changing some variables to factors:
  mutate(id_threshold = factor(id_threshold),
         opinions = factor(opinions)) %>% 

  ## Renaming variables according 2022-03-18 meeting:
  prejmenuj(1:3, c("Opinion dimensions:", "Acceptability of different opinion:",  
                    "Narrowness of identity group:")) %>% 

  ## Graph itself:
  ggplot(aes(x = `Acceptability of different opinion:`, y = ESBG, 
             fill = `Narrowness of identity group:`,
             col = `Narrowness of identity group:`, 
             group = `Acceptability of different opinion:`)) +
  facet_wrap(vars(`Narrowness of identity group:`, `Opinion dimensions:`), ncol=3) +
  geom_point(alpha = 0.15) +
  scale_x_continuous(breaks = seq(0.05, 0.50, 0.05)) +
  labs(title = "Change of polarization in simulations by 'Opinion dimensions' (1, 2, 4),\n'Narrowness of identity group' (0.05--0.85) and 'Average acceptability of different opinions' (0.05--0.5)",
       x = "Average acceptability of different opinions", y = "Polarization") +
  guides(fill = "none", color = "none") +
  theme_minimal() +
  theme(legend.position = "top")

Acceptability: full scatter plot

## For presenting variability we try now scatter plot on individual data (non-aggregated):
dfi %>%
  # sample_n(2000) %>%
  ## Selecting variables:
  select(opinions, boundary, id_threshold, ESBG) %>%  
  
  ## Changing some variables to factors:
  mutate(id_threshold = factor(id_threshold),
         opinions = factor(opinions)) %>% 
  
  ## Renaming variables according 2022-03-18 meeting:
  prejmenuj(1:3, c("Opinion dimensions:", "Acceptability of different opinion:",  
                    "Narrowness of identity group:")) %>% 

  ## Graph itself:
  ggplot(aes(x = `Acceptability of different opinion:`, y = ESBG, 
             fill = `Narrowness of identity group:`,
             col = `Narrowness of identity group:`, 
             group = `Acceptability of different opinion:`)) +
  facet_wrap(vars(`Narrowness of identity group:`, `Opinion dimensions:`), ncol=3) +
  geom_point(alpha = 0.15) +
  scale_x_continuous(breaks = seq(0.05, 0.50, 0.05)) +
  labs(title = "Change of polarization in simulations by 'Opinion dimensions' (1, 2, 4),\n'Narrowness of identity group' (0.35--0.6) and 'Average acceptability of different opinions' (0.05--0.3)",
       x = "Average acceptability of different opinions", y = "Polarization") +
  guides(fill = "none", color = "none") +
  theme_minimal() +
  theme(legend.position = "top")

Pulped clouds: Exchanging Acceptability and Narrowness

For this set of graph we flip the perspective – we set Acceptability of different opinion as slicing variable, associated with color/fill, on the X axis we assign Narrowness of identity group. Let’s hope, it helps understand the 2-way phase transition better.

Narrownes: reduced boxplot

## For presenting variability we try now boxplots on individual data (non-aggregated):
dfi %>%
  filter(round(100 * boundary, 1) %in% seq(5, 50, 5)) %>% 
  # sample_n(2000) %>%
  ## Selecting variables:
  select(opinions, boundary, id_threshold, ESBG) %>% 
  mutate(boundary = factor(boundary),
         opinions = factor(opinions)) %>% 
  
  ## Renaming variables according 2022-03-18 meeting:
  prejmenuj(1:3, c("Opinion dimensions:", "Acceptability of different opinion:",  
                    "Narrowness of identity group:")) %>% 

  ## Graph itself:
  ggplot() +
  aes(fill = `Acceptability of different opinion:`, y = ESBG, 
      x = `Narrowness of identity group:`,
      group = `Narrowness of identity group:`,
      col = `Acceptability of different opinion:`) +
  facet_wrap(vars(`Acceptability of different opinion:`, `Opinion dimensions:`), ncol=3) +
  geom_boxplot(alpha = 0.2) +
  geom_jitter(alpha = 0.2) +
  scale_x_continuous(breaks = seq(0.05, 0.850, 0.1)) +
  labs(title = "Change of polarization in simulations by 'Opinion dimensions' (1, 2, 4),\n'Narrowness of identity group' (0.05--0.85) and 'Average acceptability of different opinions' (0.05--0.5)",
      y = "Polarization") +
  guides(fill = "none", color = "none") +
  theme_minimal() +
  theme(legend.position = "top")  

Narrownes: full boxplot

Now same graph, but with every value:

## For presenting variability we try now boxplots on individual data (non-aggregated):
dfi %>%
  # sample_n(2000) %>%
  ## Selecting variables:
  select(opinions, boundary, id_threshold, ESBG) %>% 
  mutate(boundary = factor(boundary),
         opinions = factor(opinions)) %>% 
  
  ## Renaming variables according 2022-03-18 meeting:
  prejmenuj(1:3, c("Opinion dimensions:", "Acceptability of different opinion:",  
                    "Narrowness of identity group:")) %>% 

  ## Graph itself:
  ggplot() +
  aes(fill = `Acceptability of different opinion:`, y = ESBG, 
      x = `Narrowness of identity group:`,
      group = `Narrowness of identity group:`, 
      col = `Acceptability of different opinion:`) +
  facet_wrap(vars(`Acceptability of different opinion:`, `Opinion dimensions:`), ncol=3) +
  geom_boxplot(alpha = 0.2) +
  geom_jitter(alpha = 0.2) +
  scale_x_continuous(breaks = seq(0.05, 0.85, 0.1)) +
  labs(title = "Change of polarization in simulations by 'Opinion dimensions' (1, 2, 4),\n'Narrowness of identity group' (0.05--0.85) and 'Average acceptability of different opinions' (0.05--0.5)",
       y = "Polarization") +
  guides(fill = "none", color = "none") +
  theme_minimal() +
  theme(legend.position = "top")  

Narrownes: reduced scatter plot

Now, same data but slightly different graph

## For presenting variability we try now boxplots on individual data (non-aggregated):
dfi %>%
  filter(round(100 * boundary, 0) %in% seq(5, 50, 5)) %>% 
  # sample_n(2000) %>%
  ## Selecting variables:
  select(opinions, boundary, id_threshold, ESBG) %>% 

  ## Changing some variables to factors:
  mutate(boundary = factor(boundary),
         opinions = factor(opinions)) %>% 

  ## Renaming variables according 2022-03-18 meeting:
  prejmenuj(1:3, c("Opinion dimensions:", "Acceptability of different opinion:",  
                    "Narrowness of identity group:")) %>% 

  ## Graph itself:
  ggplot(aes(fill = `Acceptability of different opinion:`, y = ESBG, 
             x = `Narrowness of identity group:`,
             col = `Acceptability of different opinion:`)) +
  facet_wrap(vars(`Acceptability of different opinion:`, `Opinion dimensions:`), ncol=3) +
  geom_point(alpha = 0.15) +
  scale_x_continuous(breaks = seq(0.05, 0.85, 0.1)) +
  labs(title = "Change of polarization in simulations by 'Opinion dimensions' (1, 2, 4),\n'Narrowness of identity group' (0.05--0.85) and 'Average acceptability of different opinions' (0.05--0.5)",
       y = "Polarization") +
  guides(fill = "none", color = "none") +
  theme_minimal() +
  theme(legend.position = "top")

Narrownes: full scatter plot

Now, same graph again with complete data:

## For presenting variability we try now boxplots on individual data (non-aggregated):
dfi %>%
  # sample_n(2000) %>%
  ## Selecting variables:
  select(opinions, boundary, id_threshold, ESBG) %>% 

  ## Changing some variables to factors:
  mutate(boundary = factor(boundary),
         opinions = factor(opinions)) %>% 

  ## Renaming variables according 2022-03-18 meeting:
  prejmenuj(1:3, c("Opinion dimensions:", "Acceptability of different opinion:",  
                    "Narrowness of identity group:")) %>% 

  ## Graph itself:
  ggplot(aes(fill = `Acceptability of different opinion:`, y = ESBG, 
             x = `Narrowness of identity group:`,
             col = `Acceptability of different opinion:`)) +
  facet_wrap(vars(`Acceptability of different opinion:`, `Opinion dimensions:`), ncol=3) +
  geom_point(alpha = 0.15) +
  scale_x_continuous(breaks = seq(0.05, 0.85, 0.1)) +
  labs(title = "Change of polarization in simulations by 'Opinion dimensions' (1, 2, 4),\n'Narrowness of identity group' (0.05--0.85) and 'Average acceptability of different opinions' (0.05--0.5)",
        y = "Polarization") +
  guides(fill = "none", color = "none") +
  theme_minimal() +
  theme(legend.position = "top")

Regression

m = lm(ESBG ~ factor(opinions)+id_threshold+boundary, data = filter(dfi, identity))
ms = summary(m)

p1 = lm(ESBG ~ factor(opinions)+factor(id_threshold)+factor(boundary), data = filter(dfi, identity))
p1s = summary(p1)
p1s
## 
## Call:
## lm(formula = ESBG ~ factor(opinions) + factor(id_threshold) + 
##     factor(boundary), data = filter(dfi, identity))
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.47473 -0.07893 -0.00562  0.06097  0.63368 
## 
## Coefficients:
##                            Estimate Std. Error  t value Pr(>|t|)    
## (Intercept)               0.2022701  0.0024221   83.509  < 2e-16 ***
## factor(opinions)2        -0.0909953  0.0005244 -173.520  < 2e-16 ***
## factor(opinions)4        -0.1346642  0.0005244 -256.792  < 2e-16 ***
## factor(id_threshold)0.06  0.0003331  0.0027249    0.122  0.90271    
## factor(id_threshold)0.07  0.0004884  0.0027249    0.179  0.85774    
## factor(id_threshold)0.08 -0.0002519  0.0027249   -0.092  0.92636    
## factor(id_threshold)0.09  0.0006696  0.0027249    0.246  0.80588    
## factor(id_threshold)0.1   0.0016191  0.0027249    0.594  0.55239    
## factor(id_threshold)0.11  0.0018439  0.0027249    0.677  0.49861    
## factor(id_threshold)0.12  0.0042212  0.0027249    1.549  0.12135    
## factor(id_threshold)0.13  0.0042272  0.0027249    1.551  0.12083    
## factor(id_threshold)0.14  0.0044305  0.0027249    1.626  0.10397    
## factor(id_threshold)0.15  0.0059338  0.0027249    2.178  0.02944 *  
## factor(id_threshold)0.16  0.0061466  0.0027249    2.256  0.02409 *  
## factor(id_threshold)0.17  0.0063027  0.0027249    2.313  0.02072 *  
## factor(id_threshold)0.18  0.0068392  0.0027249    2.510  0.01208 *  
## factor(id_threshold)0.19  0.0074397  0.0027249    2.730  0.00633 ** 
## factor(id_threshold)0.2   0.0075525  0.0027249    2.772  0.00558 ** 
## factor(id_threshold)0.21  0.0109810  0.0027249    4.030 5.58e-05 ***
## factor(id_threshold)0.22  0.0116832  0.0027249    4.288 1.81e-05 ***
## factor(id_threshold)0.23  0.0122133  0.0027249    4.482 7.39e-06 ***
## factor(id_threshold)0.24  0.0137915  0.0027249    5.061 4.17e-07 ***
## factor(id_threshold)0.25  0.0197916  0.0027249    7.263 3.79e-13 ***
## factor(id_threshold)0.26  0.0189445  0.0027249    6.952 3.60e-12 ***
## factor(id_threshold)0.27  0.0227269  0.0027249    8.340  < 2e-16 ***
## factor(id_threshold)0.28  0.0240988  0.0027249    8.844  < 2e-16 ***
## factor(id_threshold)0.29  0.0292384  0.0027249   10.730  < 2e-16 ***
## factor(id_threshold)0.3   0.0383893  0.0027249   14.088  < 2e-16 ***
## factor(id_threshold)0.31  0.0457935  0.0027249   16.806  < 2e-16 ***
## factor(id_threshold)0.32  0.0526666  0.0027249   19.328  < 2e-16 ***
## factor(id_threshold)0.33  0.0590511  0.0027249   21.671  < 2e-16 ***
## factor(id_threshold)0.34  0.0658283  0.0027249   24.158  < 2e-16 ***
## factor(id_threshold)0.35  0.0713709  0.0027249   26.192  < 2e-16 ***
## factor(id_threshold)0.36  0.0787360  0.0027249   28.895  < 2e-16 ***
## factor(id_threshold)0.37  0.0899753  0.0027249   33.020  < 2e-16 ***
## factor(id_threshold)0.38  0.0989856  0.0027249   36.326  < 2e-16 ***
## factor(id_threshold)0.39  0.1138922  0.0027249   41.797  < 2e-16 ***
## factor(id_threshold)0.4   0.1272651  0.0027249   46.704  < 2e-16 ***
## factor(id_threshold)0.41  0.1417062  0.0027249   52.004  < 2e-16 ***
## factor(id_threshold)0.42  0.1551774  0.0027249   56.948  < 2e-16 ***
## factor(id_threshold)0.43  0.1684416  0.0027249   61.815  < 2e-16 ***
## factor(id_threshold)0.44  0.1766043  0.0027249   64.811  < 2e-16 ***
## factor(id_threshold)0.45  0.1882367  0.0027249   69.080  < 2e-16 ***
## factor(id_threshold)0.46  0.1975317  0.0027249   72.491  < 2e-16 ***
## factor(id_threshold)0.47  0.2093431  0.0027249   76.826  < 2e-16 ***
## factor(id_threshold)0.48  0.2226912  0.0027249   81.724  < 2e-16 ***
## factor(id_threshold)0.49  0.2321232  0.0027249   85.186  < 2e-16 ***
## factor(id_threshold)0.5   0.2407158  0.0027249   88.339  < 2e-16 ***
## factor(id_threshold)0.51  0.2499901  0.0027249   91.742  < 2e-16 ***
## factor(id_threshold)0.52  0.2525317  0.0027249   92.675  < 2e-16 ***
## factor(id_threshold)0.53  0.2584318  0.0027249   94.840  < 2e-16 ***
## factor(id_threshold)0.54  0.2599984  0.0027249   95.415  < 2e-16 ***
## factor(id_threshold)0.55  0.2647130  0.0027249   97.146  < 2e-16 ***
## factor(id_threshold)0.56  0.2663560  0.0027249   97.749  < 2e-16 ***
## factor(id_threshold)0.57  0.2599419  0.0027249   95.395  < 2e-16 ***
## factor(id_threshold)0.58  0.2583622  0.0027249   94.815  < 2e-16 ***
## factor(id_threshold)0.59  0.2569294  0.0027249   94.289  < 2e-16 ***
## factor(id_threshold)0.6   0.2547712  0.0027249   93.497  < 2e-16 ***
## factor(id_threshold)0.61  0.2493697  0.0027249   91.515  < 2e-16 ***
## factor(id_threshold)0.62  0.2454614  0.0027249   90.081  < 2e-16 ***
## factor(id_threshold)0.63  0.2432269  0.0027249   89.260  < 2e-16 ***
## factor(id_threshold)0.64  0.2435332  0.0027249   89.373  < 2e-16 ***
## factor(id_threshold)0.65  0.2373583  0.0027249   87.107  < 2e-16 ***
## factor(id_threshold)0.66  0.2367016  0.0027249   86.866  < 2e-16 ***
## factor(id_threshold)0.67  0.2348878  0.0027249   86.200  < 2e-16 ***
## factor(id_threshold)0.68  0.2257335  0.0027249   82.841  < 2e-16 ***
## factor(id_threshold)0.69  0.2143655  0.0027249   78.669  < 2e-16 ***
## factor(id_threshold)0.7   0.2140982  0.0027249   78.571  < 2e-16 ***
## factor(id_threshold)0.71  0.1964114  0.0027249   72.080  < 2e-16 ***
## factor(id_threshold)0.72  0.1843242  0.0027249   67.644  < 2e-16 ***
## factor(id_threshold)0.73  0.1726068  0.0027249   63.344  < 2e-16 ***
## factor(id_threshold)0.74  0.1613952  0.0027249   59.230  < 2e-16 ***
## factor(id_threshold)0.75  0.1585310  0.0027249   58.178  < 2e-16 ***
## factor(id_threshold)0.76  0.1492001  0.0027249   54.754  < 2e-16 ***
## factor(id_threshold)0.77  0.1499133  0.0027249   55.016  < 2e-16 ***
## factor(id_threshold)0.78  0.1509189  0.0027249   55.385  < 2e-16 ***
## factor(id_threshold)0.79  0.1499516  0.0027249   55.030  < 2e-16 ***
## factor(id_threshold)0.8   0.1466179  0.0027249   53.806  < 2e-16 ***
## factor(id_threshold)0.81  0.1454911  0.0027249   53.393  < 2e-16 ***
## factor(id_threshold)0.82  0.1499035  0.0027249   55.012  < 2e-16 ***
## factor(id_threshold)0.83  0.1487600  0.0027249   54.593  < 2e-16 ***
## factor(id_threshold)0.84  0.1489492  0.0027249   54.662  < 2e-16 ***
## factor(id_threshold)0.85  0.1482440  0.0027249   54.403  < 2e-16 ***
## factor(boundary)0.06      0.0012438  0.0020535    0.606  0.54470    
## factor(boundary)0.07      0.0048897  0.0020535    2.381  0.01726 *  
## factor(boundary)0.08      0.0082442  0.0020535    4.015 5.95e-05 ***
## factor(boundary)0.09      0.0100674  0.0020535    4.903 9.46e-07 ***
## factor(boundary)0.1       0.0159350  0.0020535    7.760 8.51e-15 ***
## factor(boundary)0.11      0.0226107  0.0020535   11.011  < 2e-16 ***
## factor(boundary)0.12      0.0291271  0.0020535   14.184  < 2e-16 ***
## factor(boundary)0.13      0.0293258  0.0020535   14.281  < 2e-16 ***
## factor(boundary)0.14      0.0272234  0.0020535   13.257  < 2e-16 ***
## factor(boundary)0.15      0.0233644  0.0020535   11.378  < 2e-16 ***
## factor(boundary)0.16      0.0165132  0.0020535    8.042 8.90e-16 ***
## factor(boundary)0.17      0.0083789  0.0020535    4.080 4.50e-05 ***
## factor(boundary)0.18      0.0054924  0.0020535    2.675  0.00748 ** 
## factor(boundary)0.19     -0.0007736  0.0020535   -0.377  0.70638    
## factor(boundary)0.2      -0.0058439  0.0020535   -2.846  0.00443 ** 
## factor(boundary)0.21     -0.0085139  0.0020535   -4.146 3.38e-05 ***
## factor(boundary)0.22     -0.0130917  0.0020535   -6.375 1.83e-10 ***
## factor(boundary)0.23     -0.0176477  0.0020535   -8.594  < 2e-16 ***
## factor(boundary)0.24     -0.0216871  0.0020535  -10.561  < 2e-16 ***
## factor(boundary)0.25     -0.0232473  0.0020535  -11.321  < 2e-16 ***
## factor(boundary)0.26     -0.0275514  0.0020535  -13.417  < 2e-16 ***
## factor(boundary)0.27     -0.0295137  0.0020535  -14.373  < 2e-16 ***
## factor(boundary)0.28     -0.0317820  0.0020535  -15.477  < 2e-16 ***
## factor(boundary)0.29     -0.0349217  0.0020535  -17.006  < 2e-16 ***
## factor(boundary)0.3      -0.0366593  0.0020535  -17.852  < 2e-16 ***
## factor(boundary)0.31     -0.0384900  0.0020535  -18.744  < 2e-16 ***
## factor(boundary)0.32     -0.0401601  0.0020535  -19.557  < 2e-16 ***
## factor(boundary)0.33     -0.0398676  0.0020535  -19.415  < 2e-16 ***
## factor(boundary)0.34     -0.0426175  0.0020535  -20.754  < 2e-16 ***
## factor(boundary)0.35     -0.0414784  0.0020535  -20.199  < 2e-16 ***
## factor(boundary)0.36     -0.0427296  0.0020535  -20.808  < 2e-16 ***
## factor(boundary)0.37     -0.0449939  0.0020535  -21.911  < 2e-16 ***
## factor(boundary)0.38     -0.0448345  0.0020535  -21.834  < 2e-16 ***
## factor(boundary)0.39     -0.0454823  0.0020535  -22.149  < 2e-16 ***
## factor(boundary)0.4      -0.0454302  0.0020535  -22.124  < 2e-16 ***
## factor(boundary)0.41     -0.0465934  0.0020535  -22.690  < 2e-16 ***
## factor(boundary)0.42     -0.0469422  0.0020535  -22.860  < 2e-16 ***
## factor(boundary)0.43     -0.0498156  0.0020535  -24.259  < 2e-16 ***
## factor(boundary)0.44     -0.0492139  0.0020535  -23.966  < 2e-16 ***
## factor(boundary)0.45     -0.0492646  0.0020535  -23.991  < 2e-16 ***
## factor(boundary)0.46     -0.0523249  0.0020535  -25.481  < 2e-16 ***
## factor(boundary)0.47     -0.0509517  0.0020535  -24.812  < 2e-16 ***
## factor(boundary)0.48     -0.0516363  0.0020535  -25.146  < 2e-16 ***
## factor(boundary)0.49     -0.0540387  0.0020535  -26.316  < 2e-16 ***
## factor(boundary)0.5      -0.0536545  0.0020535  -26.129  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.124 on 335212 degrees of freedom
## Multiple R-squared:  0.4604, Adjusted R-squared:  0.4602 
## F-statistic:  2252 on 127 and 335212 DF,  p-value: < 2.2e-16
# f = lm(ESBG ~ factor(opinions)*factor(id_threshold)*factor(boundary), data = filter(dfi, identity))
# fs = summary(f)

I just wanna know how much variability we can explain by the full model. But I am not able to estimate the full model, since with fully factorized variables there are 11 177 (!sic) variables and interactions. Dataset is rich enough for this, but memory of my PC is not :-) Later we might try estimate the explanation by full model on Unity. But preliminary estimate shows that we pay more than 10,000 degrees of freedom by including all the interactions, but we get something around of 2 more percent points of variability explained – it totally doesn’t worth for such a high price!

OK, by fully factorized main effects only model we might explain 46 %, it means there is 54 % of variability, which is unexplainable in principle! Resp. we can’t explain it by any variable which we manipulated during simulation experiments. As I mentioned above, we might try explain it via detailed description of initial condition (however randomly generated) or via description of the course of the simulation.

BTW, fully factorized model with main effects only is the best (difference in BIC -71k), this model is better regarding the BIC than the non-factorized main effects model. Just for order, the model with non-factorized main effects explains 32.9 % of variability.